home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 111_01 / idir.c < prev    next >
Text File  |  1985-08-19  |  3KB  |  130 lines

  1. /*
  2. HEADER:        ;
  3. TITLE:        ISIS directory lister;
  4. VERSION:    1.0;
  5.  
  6. DESCRIPTION:    "Displays the directories of single density ISIS2 diskettes.";
  7.  
  8. KEYWORDS:    Disk, diskette, directory, utility, ISIS;
  9. SYSTEM:        CP/M-80;
  10. FILENAME:    IDIR.C;
  11. WARNINGS:    "Contains a syntax error which prevents compiling.";
  12. SEE-ALSO:    IDIR.DOC;
  13. AUTHORS:    Jan Larsson;
  14. COMPILERS:    BDS C;
  15. */
  16. /*****************************************************************
  17.  
  18. Version 1.0:
  19.     Jan Larsson, Kosterv. 12, S-181 35 Lidingo, SWEDEN
  20.  
  21. *****************************************************************/
  22.      
  23. #define SETTRK 10
  24. #define SETSEC 11
  25. #define SETDMA 12
  26. #define READ 13
  27.  
  28.  
  29. #include <bdscio.h>
  30.  
  31. char row ;                    
  32.  
  33. struct ientry {
  34.     char ok ;
  35.     char iname[6] ;
  36.     char iext[3] ;
  37.     char attr ;
  38.     char oflw ;
  39.     char blocks ;
  40.     char dummy[3] ; 
  41.     };
  42.  
  43. struct ientry isektor[8] ;
  44.  
  45. dsektor()
  46. {
  47.     char index, astr[7], sattr ;
  48.     char xoflw ;
  49.     char gg, gc ;
  50.  
  51.     for(index = 0 ; index < 8 ; index++){
  52.         sattr = isektor[index].attr ;
  53.         isektor[index].attr = 0 ;
  54.         xoflw = isektor[index].blocks / 64 ;
  55.         if(isektor[index].ok == 0){
  56.             if(row == 0){ row = 1 ; printf("        ");}
  57.         else { row = 0 ; putchar('\n');}
  58.         for(gg = 0 ; gg < 6 ; gg++){
  59.             gc = isektor[index].iname[gg] ;
  60.             if(gc == 0)putchar(' ');
  61.             else putchar( gc );
  62.             }
  63.         if(isektor[index].iname[gg] == 0)putchar(' ');
  64.         else putchar('.');
  65.         for(gg = 0 ; gg < 3 ; gg++){
  66.             gc = isektor[index].iext[gg] ;
  67.             if(gc == 0)putchar(' ');
  68.             else putchar( gc );
  69.             }
  70.         printf("     %3d    %5d   ",
  71.                isektor[index].blocks + 1 + xoflw,
  72.                (isektor[index].blocks - 1) * 128 + isektor[index].oflw );
  73.         if(sattr & 0x04)strcpy( astr, "W" );
  74.         else strcpy( astr, " " );
  75.         if(sattr & 0x02)strcat( astr, "S" );
  76.         else strcat( astr, " " );
  77.         if(sattr & 0x01)strcat( astr, "I" );
  78.         else strcat( astr, " " );
  79.         if(sattr & 0x80)strcat( astr, "F" );
  80.         else strcat( astr, " " );
  81.     
  82.         printf("%s", astr );
  83.             }
  84.         }
  85. }
  86.  
  87.  
  88. main( argc, argv )
  89. char **argv ;
  90. int argc ;
  91. {
  92.     char extended, sec ;
  93.     char ndriv, odriv ;
  94.  
  95.     extended = FALSE ;
  96.     row = 1 ;
  97.     ndriv = 255 ;
  98.     printf("\n + + +  Maffians Isis II Tittare  + + +\n");
  99.     printf(  "            by Janne Larsson\n");
  100.         if(argc > 1 && *(argv[1]) == '-'){
  101.             ndriv = *(argv[1]+1) ;
  102.             odriv = bdos( 25 );
  103.             ndriv -= 'A' ;
  104.             bdos( 14, ndriv );
  105.             }
  106.         else {
  107.             printf("\n\nPutta in Isis II disken nu, Rune :");
  108.             bios(3);putchar('\n');
  109.              }
  110.     putchar('\n');
  111.     printf("Directory of Isis II Diskette:\n");
  112.     printf("Name  .Ext    Blks   Length   Attr");
  113.     printf("        ");
  114.     printf("Name  .Ext    Blks   Length   Attr");
  115.     bios( SETDMA, isektor );
  116.     bios( SETTRK, 1 );
  117.     for(sec = 2 ; sec < 27 ; sec++){
  118.         bios( SETSEC, sec );
  119.         bios( READ );
  120.         dsektor();
  121.         }
  122.     printf("\n\nEnd of Isis Directory\n");
  123.     if(ndriv == 255){
  124.         printf("Skyffla in CP/M disketten igen nu, Rune :");
  125.         bios(3);
  126.         putchar('\n');
  127.         }
  128.     else bdos( 14, odriv );
  129.         }
  130.